# -*- coding:utf-8 -*-
import urllib.request
import re
class Spider(object):
    def __init__(self):
        # 起始页位置
        self.begin_page = int(input("请输入起始页："))
        # 终止页位置
        self.end_page = int(input("请输入终止页："))
        # 基本URL
        self.base_url = "https://www.0315.cc/job/"

    def load_page(self):
        """
            @brief 定义一个url请求网页的方法
            @param page 需要请求的第几页
        """
        user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.56 Safari/537.36"
        headers = {"User-Agent": user_agent}
        html = ''
        for page in range(self.begin_page, self.end_page + 1):
            url = self.base_url + "fulllist_20_" + str(page) + "_0_-1_0_0_0_0_0_-1_-1_-1_0.html?search=-1"
            request = urllib.request.Request(url, headers=headers)
            # 获取每页HTML源码字符串
            response = urllib.request.urlopen(request)
            #读取response中的内容并解码及将特殊字符替换成空
            html += response.read().decode("utf-8").replace('\xa0', '')
            # print(html.encode('gbk','ignore').decode('gbk','ignore'))
        # print(html.encode('gbk','ignore').decode('gbk','ignore'))
        return html

    # 使用正则表达式解析网页数据
    def parse_page(self, html):
        """
            @brief      定义一个解析网页的方法
            @param html 服务器返回的网页HTML
        """
        # 查找所有职位名称
        names_list = re.findall(r'<div class="left">.*?<h3><a  target="_blank" href=".*?">(.*?)</a>', html, re.S)
        # 查找所有详情链接
        links_list = re.findall(r'<div class="left">.*?<h3><a  target="_blank" href="(.*?)">', html, re.S)
        # # 查找其它元素
        company_list = re.findall(r'<div class="inner">.*?<div class="right">.*?<h3><a  target="_blank" href=".*?">(.*?)</a>', html, re.S)
        temp_list = re.findall(r'</span><em></em>(.*?)<em></em>', html)
        location_list = re.findall(r'<p><span class="pos">(.*?)</span>', html)
        publist_time_list = re.findall(r'<div class="date">更新：<span class="time">(.*?)</span></div>', html)
        # 定义空列表，以保存元素的信息
        items = []
        for i in range(0, len(names_list)):
            item = {}
            #item添加键值对并且去掉值两侧空格及换行符
            item["职位名称"] = names_list[i].strip()
            item["详情链接"] = self.base_url + links_list[i].strip()
            item["公司名称"] = company_list[i].strip()
            item["职位类别"] = temp_list[i].strip()
            item["工作地点"] = location_list[i].strip()
            item["发布时间"] = publist_time_list[i].strip()
            items.append(item)
        print(items)
        self.save_file(items)

    #创建保存数据函数
    def save_file(self, items):
        """
            @brief       将数据追加写进文件中
            @param html 文件内容
        """
        file = open('tangshan.txt', "wb+")
        file.write(str(items).encode('utf-8'))
        file.close()
if __name__ == '__main__':
    # 测试是否返回网页源码
    # 测试正则表达式/ lxml库/ bs4库
    spider = Spider()
    return_html = spider.load_page()
    # print(return_html)
    spider.parse_page(return_html.replace('\u2795',''))

    